#pragma once
#include "Protocol.hpp"

class Calculator // 创建这个类的目的只是为了构造对象方便回调函数
{
public:
    Calculator()
    {
    }
    Response Execute(const Request &rq)
    {
        Response resp;
        switch (rq.Get_oper()) // 这里为了拿到类的成员变量的值，我们还需要增加接口返回值
        {
        case '+':
            // 这里为了给resp的成员变量赋值，我们同样需要补充几个接口：
            resp.SetResult(rq.Get_x() + rq.Get_y());
            break;
        case '-':
            resp.SetResult(rq.Get_x() - rq.Get_y());
            break;
        case '*':
            resp.SetResult(rq.Get_x() * rq.Get_y());
            break;
        case '/':
        {
            if (rq.Get_y() == 0)
            {
                resp.SetCode(1); // 表示除0错误
            }
            else
            {
                resp.SetResult(rq.Get_x() / rq.Get_y());
            }
        }
        break;
        case '%':
        {
            if (rq.Get_y() == 0)
            {
                resp.SetCode(2); // 2 就是mod 0
            }
            else
            {
                resp.SetResult(rq.Get_x() % rq.Get_y());
            }
        }
        break;
        default:
            resp.SetCode(3); // 3 用户发来的计算类型，无法识别
            break;
        }
        return resp;
    }
    ~Calculator()
    {
    }
};